import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

/// Flutter 专用系统UI工具类
///
/// SystemUIUtils 是一个专门用于统一管理Flutter应用中系统UI样式的工具类，
/// 主要负责状态栏、导航栏的样式设置和显示模式控制。
/// 通过封装常用的系统UI配置，简化开发流程，确保应用界面的一致性和用户体验。
class SystemUIUtils {
  static const String tag = 'SystemUIUtils';

  /// 设置透明状态栏 - 深色图标
  /// 适用于浅色背景的页面，使用深色图标确保可见性
  static void setTransparentStatusBarDark() {
    if (kDebugMode) {
      debugPrint('$tag: 设置透明状态栏 - 深色图标（适用浅色背景）');
    }

    SystemChrome.setSystemUIOverlayStyle(
      const SystemUiOverlayStyle(
        statusBarColor: Colors.transparent, // 状态栏透明
        statusBarIconBrightness: Brightness.dark, // 深色图标
        statusBarBrightness: Brightness.light, // iOS：浅色状态栏
        systemNavigationBarColor: Colors.transparent, // 导航栏透明
        systemNavigationBarIconBrightness: Brightness.dark, // 导航栏深色图标
        systemNavigationBarContrastEnforced: false, // 关闭导航栏对比度强制
      ),
    );
  }

  /// 设置透明状态栏 - 浅色图标
  /// 适用于深色背景的页面，使用浅色图标确保可见性
  static void setTransparentStatusBarLight() {
    if (kDebugMode) {
      debugPrint('$tag: 设置透明状态栏 - 浅色图标（适用深色背景）');
    }

    SystemChrome.setSystemUIOverlayStyle(
      const SystemUiOverlayStyle(
        statusBarColor: Colors.transparent, // 状态栏透明
        statusBarIconBrightness: Brightness.light, // 浅色图标
        statusBarBrightness: Brightness.dark, // iOS：深色状态栏
        systemNavigationBarColor: Colors.transparent, // 导航栏透明
        systemNavigationBarIconBrightness: Brightness.light, // 导航栏浅色图标
        systemNavigationBarContrastEnforced: false, // 关闭导航栏对比度强制
      ),
    );
  }

  /// 根据背景色自动选择状态栏样式
  /// 智能判断背景色的明暗，自动选择最佳的图标颜色
  static void setStatusBarByBackgroundColor(Color backgroundColor) {
    if (kDebugMode) {
      debugPrint('$tag: 根据背景色自动选择状态栏样式 - ${backgroundColor.toString()}');
    }

    final brightness = ThemeData.estimateBrightnessForColor(backgroundColor);
    if (brightness == Brightness.dark) {
      // 深色背景 → 浅色图标
      setTransparentStatusBarLight();
    } else {
      // 浅色背景 → 深色图标
      setTransparentStatusBarDark();
    }
  }

  /// 水墨风格状态栏样式
  /// 专门为水墨风格页面（如闪屏页、登录页）设计的状态栏样式
  static void setInkStyleStatusBar() {
    if (kDebugMode) {
      debugPrint('$tag: 设置水墨风格状态栏样式');
    }

    SystemChrome.setSystemUIOverlayStyle(
      const SystemUiOverlayStyle(
        statusBarColor: Colors.transparent, // 状态栏透明
        statusBarIconBrightness: Brightness.dark, // 深色图标
        statusBarBrightness: Brightness.light, // iOS：浅色状态栏
        systemNavigationBarColor: Colors.transparent, // 导航栏透明
        systemNavigationBarIconBrightness: Brightness.dark, // 导航栏深色图标
        systemNavigationBarContrastEnforced: false, // 关闭导航栏对比度强制
      ),
    );
  }

  /// 设置指定颜色的状态栏
  /// [statusBarColor] 状态栏背景颜色
  /// [isDarkIcons] 是否使用深色图标，默认为true
  static void setStatusBarColor(Color statusBarColor, {bool isDarkIcons = true}) {
    if (kDebugMode) {
      debugPrint('$tag: 设置状态栏颜色 - ${statusBarColor.toString()}, 深色图标: $isDarkIcons');
    }

    SystemChrome.setSystemUIOverlayStyle(
      SystemUiOverlayStyle(
        statusBarColor: statusBarColor,
        statusBarIconBrightness: isDarkIcons ? Brightness.dark : Brightness.light,
        statusBarBrightness: isDarkIcons ? Brightness.light : Brightness.dark,
        systemNavigationBarColor: Colors.transparent,
        systemNavigationBarIconBrightness: isDarkIcons ? Brightness.dark : Brightness.light,
        systemNavigationBarContrastEnforced: false,
      ),
    );
  }

  /// 设置全屏模式
  /// 隐藏状态栏和导航栏，适用于游戏、视频播放等场景
  static void setFullScreen() {
    if (kDebugMode) {
      debugPrint('$tag: 设置全屏模式');
    }

    SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
  }

  /// 设置正常显示模式
  /// 显示状态栏和导航栏，边到边显示
  static void setNormalMode() {
    if (kDebugMode) {
      debugPrint('$tag: 设置正常显示模式');
    }

    SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
  }

  /// 为特定页面设置专门的状态栏样式
  /// [pageName] 页面名称（用于调试）
  /// [statusBarColor] 状态栏颜色
  /// [iconBrightness] 图标亮度
  static void setPageStatusBar({
    required String pageName,
    Color statusBarColor = Colors.transparent,
    Brightness iconBrightness = Brightness.dark,
  }) {
    if (kDebugMode) {
      debugPrint('$tag: 为页面 [$pageName] 设置专用状态栏样式');
    }

    SystemChrome.setSystemUIOverlayStyle(
      SystemUiOverlayStyle(
        statusBarColor: statusBarColor,
        statusBarIconBrightness: iconBrightness,
        statusBarBrightness: iconBrightness == Brightness.dark 
            ? Brightness.light 
            : Brightness.dark,
        systemNavigationBarColor: Colors.transparent,
        systemNavigationBarIconBrightness: iconBrightness,
        systemNavigationBarContrastEnforced: false,
      ),
    );
  }

  /// 重置为默认样式
  static void resetToDefault() {
    if (kDebugMode) {
      debugPrint('$tag: 重置为默认系统UI样式');
    }

    setTransparentStatusBarDark();
    setNormalMode();
  }

  /// 获取当前系统UI配置信息
  /// 返回包含当前配置信息的Map，用于调试
  static Map<String, dynamic> getSystemUIInfo() {
    // Web 平台检查
    if (kIsWeb) {
      final info = {
        'platform': 'web',
        'isAndroid': false,
        'isIOS': false,
        'isWeb': true,
        'timestamp': DateTime.now().toIso8601String(),
        'systemUIMode': 'not applicable for web',
        'description': 'Web平台不需要系统UI设置',
      };

      if (kDebugMode) {
        debugPrint('$tag: 系统UI信息 (Web平台) - $info');
      }

      return info;
    }

    // 移动端平台
    final info = {
      'platform': Platform.operatingSystem,
      'isAndroid': Platform.isAndroid,
      'isIOS': Platform.isIOS,
      'isWeb': false,
      'timestamp': DateTime.now().toIso8601String(),
      'systemUIMode': 'edgeToEdge', // 当前主要使用的模式
      'description': '透明状态栏，自适应图标颜色',
    };

    if (kDebugMode) {
      debugPrint('$tag: 系统UI信息 - $info');
    }

    return info;
  }

  /// 获取平台特定的配置
  static SystemUiOverlayStyle getPlatformStyle({
    required Brightness iconBrightness,
    Color statusBarColor = Colors.transparent,
  }) {
    // Web 平台返回默认配置
    if (kIsWeb) {
      return SystemUiOverlayStyle(
        statusBarColor: statusBarColor,
        statusBarIconBrightness: iconBrightness,
      );
    }

    if (Platform.isIOS) {
      // iOS特定配置
      return SystemUiOverlayStyle(
        statusBarColor: statusBarColor,
        statusBarIconBrightness: iconBrightness,
        statusBarBrightness: iconBrightness == Brightness.dark 
            ? Brightness.light 
            : Brightness.dark,
      );
    } else {
      // Android特定配置
      return SystemUiOverlayStyle(
        statusBarColor: statusBarColor,
        statusBarIconBrightness: iconBrightness,
        systemNavigationBarColor: Colors.transparent,
        systemNavigationBarIconBrightness: iconBrightness,
        systemNavigationBarContrastEnforced: false,
      );
    }
  }
}
